import { Page, PipelineStageError } from "corvos"; import { strapiLoader } from "$/deps/strapi.tsx"; import { releaseStrapiSchema } from "$/schemas/releases.ts"; import { BaseLayout } from "$/ui/base/BaseLayout.tsx"; import { ReleaseCard } from "$/ui/components/ReleaseCard.tsx"; import { SiteHeader } from "$/ui/components/SiteHeader.tsx"; import { CardList } from "$/ui/layouts/CardList.tsx"; import { Container } from "$/ui/layouts/Container.tsx"; import { HList } from "$/ui/layouts/HList.tsx"; import { ActionButton } from "$/ui/objects/ActionButton.tsx"; import { Badge } from "$/ui/objects/Badge.tsx"; import { Body } from "$/ui/objects/Body.tsx"; import { Divider } from "$/ui/objects/Divider.tsx"; import { Heading } from "$/ui/objects/Heading.tsx"; import { Icon } from "$/ui/objects/Icon.tsx"; import site from "@/corvos.config.ts"; export const pages = site.$.pageGenerator(async function* () { for await (const item of strapiLoader.loadCollection("corvos-releases", releaseStrapiSchema, { "populate[0]": "files", "sort[0]": "date:desc", })) { if (item instanceof PipelineStageError) { yield item; continue; } yield new Page(".strapi", item.notes ?? [], { ...item, title: `Corvos ${item.version}`, type: "release" as const, }); } }); export const template = site.$.template({ type: "release" }, (page, pages) => { const query = site.$.query(pages); const feed = query.type(".rss").match({ type: "releases" }).one(); const prev = query.type(".html").match({ type: "release" }).prev(page); const next = query.type(".html").match({ type: "release" }).next(page); return ( } level="quiet" pill title="RSS Feed" /> } >
{page.data.title}
  • {page.data.title} {{ __html: page.content }}
    {prev && } {next && }
    ); });